﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ECOSYSTEM_Dominio;
using ECOSYSTEM_BL;

namespace ECOSYSTEMPRESENTACION
{
    public partial class frmFactura : Form, Interfaz, InterfazGuia
    {
        public frmFactura()
        {
            InitializeComponent();
        }
        ClienteBL elClienteBl = new ClienteBL();
        TemporalBL elTemporalBL = new TemporalBL();
        Factura laFactura = new Factura();
        FacturaBL laFacturaBL = new FacturaBL();
        Factura.DetalleFacturaProducto elDetalleFactura = new Factura.DetalleFacturaProducto();
        List<Temporal> lista;
        Double IGV, TasaCambio;
        String Moneda;
        Double SubTotal = 0, Impuesto = 0, MontoTotal = 0;
        Int32 res, IDFactura;
        frmGuiaRemision formGuia = new frmGuiaRemision();
        public frmDesactivarSerie formDesSerie;
        public void LlenarComboCliente()
        {
            if (cmbRazonSocial.DataSource == null)
            {
                cmbRazonSocial.DataSource = elClienteBl.ObtenerClientes("FACTURA");
                cmbRazonSocial.DisplayMember = "Cliente";
                cmbRazonSocial.ValueMember = "RUC-DNI";
            }
        }
        private Factura ObtenerObjetoFactura()
        {
            laFactura.NroFactura = txtNroFactura.Text;
            laFactura.FecEmisionFac = dtpFechaActual.Text;
            laFactura.MonedaFac = cmbTipoMoneda.Text;
            laFactura.TCambioFac = txtTCambioComprob.Text;
            laFactura.SubTotalFac = Convert.ToDouble(txtSubTotal.Text);
            laFactura.IGVFact = Convert.ToDouble(txtIGV.Text); ;
            laFactura.TotalFac = MontoTotal;
            laFactura.TCancelacionFac = cmbFormaPago.Text;
            laFactura.PagoCon = Convert.ToDouble(txtPago.Text);
            laFactura.NroDiasPlaso = Convert.ToInt32(txtNroDias.Text);
            laFactura.Estado = cmbEstado.Text;
            //laFactura.ElUsuario = Convert.ToInt32(lblCodigoUsuario.Text);
            if (txtNroGuia.Text == "")
                laFactura.LaGuiaRemision = "0";
            else
                laFactura.LaGuiaRemision = txtNroGuia.Text;
            laFactura.ElCliente = txtRUCCLiente.Text;
            return laFactura;
        }
        private Boolean GuardarFactura()
        {
            Factura laFactura = ObtenerObjetoFactura();
            IDFactura = laFacturaBL.guardarFactura(laFactura);
            GuardarDetalleFactura();
            return true;
        }
        private Boolean ActualizarFactura() {
            Factura laFactura = ObtenerObjetoFactura();
            if (txtNroFactura.Text != lblNroFactura.Text)
            {
                laFacturaBL.ActualizarFactura(laFactura, Convert.ToInt32(lblFacturaID.Text), txtNroFactura.Text);
            }
            else
                laFacturaBL.ActualizarFactura(laFactura, Convert.ToInt32(lblFacturaID.Text), "");
            EliminarProductosRegistradosDetalleFactura();            
            return true;            
        }
        private Boolean EliminarProductosRegistradosDetalleFactura() {
            if (dgvProductosEliminar.Rows.Count > 0) {
                for (int i = 0; i <= dgvProductosEliminar.Rows.Count - 1; i++) {
                    laFacturaBL.EliminarProductoRegistradoDeDetalleFactura(Convert.ToInt32(dgvProductosEliminar["FacturaID",i].Value),Convert.ToInt32(dgvProductosEliminar["ProductoID",i].Value));
                }
            }
            GuardarDetalleFactura();
            return true;
        }
        private void GuardarDetalleFactura()
        {
            for (int i = 0; i <= dgvDetalleFactura.Rows.Count - 1; i++)
            {
                if(Convert.ToString(dgvDetalleFactura["Identificador",i].Value) == "N")
                    EnviarDatosBD(Convert.ToInt32(dgvDetalleFactura["CantidadProd", i].Value), Convert.ToDouble(dgvDetalleFactura["PrecioUnitProd", i].Value), Convert.ToInt32(dgvDetalleFactura["CodigoProducto", i].Value), IDFactura,"N");
                if (Convert.ToString(dgvDetalleFactura["Identificador", i].Value) == "A")
                    EnviarDatosBD(Convert.ToInt32(dgvDetalleFactura["CantidadProd", i].Value), Convert.ToDouble(dgvDetalleFactura["PrecioUnitProd", i].Value), Convert.ToInt32(dgvDetalleFactura["CodigoProducto", i].Value), IDFactura, "A");
            }
            if(lblFacturaID.Text =="")
                formDesSerie.EnviarDatosSerieVendido("FACTURA", IDFactura);
            else
                formDesSerie.EnviarDatosSerieVendido("FACTURA", Convert.ToInt32(lblFacturaID.Text));
        }
        private Boolean EnviarDatosBD(Int32 Cantidad, Double PrecioVentaUnit, Int32 IDProducto, Int32 IDFactura, String NuevoOActualizar)
        {
            elDetalleFactura.CantidadProd = Cantidad;
            elDetalleFactura.PrecioVenta = PrecioVentaUnit;
            elDetalleFactura.ProductoID = IDProducto;
            if(lblFacturaID.Text != "")          
                elDetalleFactura.FacturaID = Convert.ToInt32(lblFacturaID.Text);
            else
                elDetalleFactura.FacturaID = IDFactura;
            if(NuevoOActualizar == "N")
                laFacturaBL.guardarDetalleFacturaProducto(elDetalleFactura);
            if (NuevoOActualizar == "A")
                laFacturaBL.ActualizarDetalleFacturaProducto(elDetalleFactura);
            return true;
        }
        public void ObtenerTCambio()
        {
            lista = elTemporalBL.ObtenerActualesDatos();
            foreach (Temporal fila in lista)
            {
                TasaCambio = fila.TasaCambio;
                IGV = fila.IGV;
                Moneda = fila.MonedaVentas;
            }
        }
        private void InhabilitarCampos()
        {
            txtNroFactura.Text = "";
            txtNroGuia.Text = "";
            cmbRazonSocial.DataSource = null;
            txtRUCCLiente.Text = "";
            txtDirecCliente.Text = "";
            txtProducto.Text = "";
            txtCantidad.Text = "";
            txtPrecioVenta.Text = "";
            dgvDetalleFactura.Rows.Clear();            
            txtNroDias.Text = "";
            txtPago.Text = "";
            txtStockActual.Text = "";
            txtVuelto.Text = "0";
            txtSubTotal.Text = "0.0";
            txtIGV.Text = "0.0";
            txtTotal.Text = "0.0";
            lblFacturaID.Text = "";
            lblReferencia.Text = "";
            btnAgregarProducto.Visible = true;
            btnActualizarProducto.Visible = false;
            btnCancelarUpdateProducto.Visible = false;
            cbMostrarGuia.Visible = false;
            cbRegistrarGuia.Visible = false;
            gbEstado.Visible = false;
            formDesSerie.Close();
        }        
        public void ActivarMenu(bool Opcion)
        {
            throw new NotImplementedException();
        }
        public void CargarDatosCliente(string Nombre, string Ruc, string Direccion)
        {
            try
            {
                cmbRazonSocial.Text = Nombre;
                txtRUCCLiente.Text = Ruc;
                txtDirecCliente.Text = Direccion;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        public void CargardatosProducto(string NomProd, string Cantidad, string PrecioVenta, string CodProd)
        {
            try
            {
                if (Moneda == "DOLARES" && txtTCambioComprob.Text == "SOLES")
                {
                    if (MessageBox.Show("El producto fue registrado en DOLARES pero la Venta es en SOLES\n¿Desea Convertirlo en SOLES?", "Conversion de Moneda", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        txtPrecioVenta.Text = String.Format("{0:F}", Convert.ToDouble(PrecioVenta) * TasaCambio);
                    }

                }
                else { txtPrecioVenta.Text = PrecioVenta; }
                if (Moneda == "SOLES" && txtTCambioComprob.Text != "SOLES")
                {
                    if (MessageBox.Show("El producto fue registrado en SOLES pero la Venta es en DOLARES\n¿Desea Convertirlo en DOLARES?", "Conversion de Moneda", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        txtPrecioVenta.Text = String.Format("{0:F}", Convert.ToDouble(PrecioVenta) / TasaCambio);
                    }

                }
                else { txtPrecioVenta.Text = PrecioVenta; }
                txtProducto.Text = NomProd;
                txtStockActual.Text = Cantidad;
                lblCodigoProducto.Text = CodProd;
                txtCantidad.Text = "1";
                txtCantidad.Select();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        public void LlenarDatosCliente(String RucBuscar)
        {
            List<Cliente> lista;
            lista = elClienteBl.BuscarClienteID(Convert.ToString(cmbRazonSocial.SelectedValue));
            foreach (Cliente fila in lista)
            {
                this.txtRUCCLiente.Text = fila.RUCDNICLiente.ToString();
                this.txtDirecCliente.Text = fila.DirecCliente.ToString();
            }
        }
        //CALCULAR IGV
        public void CalcularMonto()
        {
            MontoTotal = 0;
            for (int i = 0; i <= dgvDetalleFactura.Rows.Count - 1; i++)
            {
                MontoTotal = MontoTotal + Convert.ToDouble(dgvDetalleFactura["Monto", i].Value);
            }
            Impuesto = MontoTotal * (IGV / 100);
            SubTotal = MontoTotal - Impuesto;
            txtSubTotal.Text = String.Format("{0:F}", SubTotal);
            txtIGV.Text = String.Format("{0:F}", Impuesto);
            if (cmbTipoMoneda.SelectedIndex == 0)
            {
                txtTotal.Text = String.Format("{0:$ #,##0.00}", MontoTotal);
            }
            if (cmbTipoMoneda.SelectedIndex == 1)
            {
                txtTotal.Text = String.Format("{0:C}", MontoTotal);
            }
            txtVuelto.Text = String.Format("{0:F}", MontoTotal);
        }
        private Int32 VerificarListaProductoRepetido()
        {
            for (int i = 0; i <= dgvDetalleFactura.Rows.Count - 1; i++)
            {
                if (lblCodigoProducto.Text == Convert.ToString(dgvDetalleFactura["CodigoProducto", i].Value))
                {
                    res = 1;
                    break;
                }
                else res = 0;
            }
            return res;
        }
        private void CambiarMoneda(String tipo)
        {
            Double MontoT, PrecioUni;
            if (tipo == "DOLARES")
            {
                for (int i = 0; i <= dgvDetalleFactura.Rows.Count - 1; i++)
                {
                    MontoT = Convert.ToDouble(dgvDetalleFactura["Monto", i].Value) / Convert.ToDouble(txtTCambioComprob.Text);
                    PrecioUni = MontoT / Convert.ToInt32(dgvDetalleFactura["CantidadProd", i].Value);
                    dgvDetalleFactura["PrecioUnitProd", i].Value = String.Format("{0:F}", PrecioUni);
                    dgvDetalleFactura["Monto", i].Value = String.Format("{0:F}", MontoT);
                }
            }
            if (tipo == "SOLES")
            {
                for (int i = 0; i <= dgvDetalleFactura.Rows.Count - 1; i++)
                {
                    MontoT = Convert.ToDouble(dgvDetalleFactura["Monto", i].Value) * TasaCambio;
                    PrecioUni = MontoT / Convert.ToInt32(dgvDetalleFactura["CantidadProd", i].Value);
                    dgvDetalleFactura["PrecioUnitProd", i].Value = String.Format("{0:F}", PrecioUni);
                    dgvDetalleFactura["Monto", i].Value = String.Format("{0:F}", MontoT);
                }
            }
        }
        public void FormularioAbrirSerie()
        {
            formDesSerie.MdiParent = this.MdiParent;          
            formDesSerie.Show();
        }
        private void ValidadCantidad(Int32 CodigoProdu)
        {
            Int32 CanUpdate = Convert.ToInt32(txtCantidad.Text);
            Int32 CanActual = formDesSerie.CantidadProducto(Convert.ToInt32(lblCodigoProducto.Text));
            if (CanUpdate > CanActual)
            {
                formDesSerie.lblCantidad.Text = Convert.ToString(CanUpdate - CanActual);
                formDesSerie.txtFiltrarSerie.ReadOnly = false;
                formDesSerie.dgvListaSerieActivas.Enabled = true;
                formDesSerie.CargarSeriePorProducto(Convert.ToInt32(lblCodigoProducto.Text));
                FormularioAbrirSerie();
                formDesSerie.Show();
            }
            if (CanUpdate < CanActual)
            {
                if (MessageBox.Show("EL NRO DE SERIES REGISTRADAS ES MAYOR AL QUE SE ESTA INGRESANDO\n\t¿DESEA ELIMINAR SERIES?", "ELIMINAR SERIE ADICIONAL", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    formDesSerie.lblCantidad.Text = "0";
                    formDesSerie.lblIDProducto.Visible = true;
                    formDesSerie.lblIDProducto.Text = "ID PRODUCTO A ELIMINAR :  " + CodigoProdu;
                    formDesSerie.Show();
                }
            }
        }
        public void CargarDetalleFactura() {
            List<Factura.DetalleFacturaProducto> lista;
            lista = laFacturaBL.ObtenerDetalleFacturaEmitida(Convert.ToInt32(lblFacturaID.Text));
            if (lista.Count > 0) {
                foreach (Factura.DetalleFacturaProducto fila in lista)
                {
                    dgvDetalleFactura.Rows.Add(fila.CantidadProd.ToString() ,fila.NameProduc,String.Format("{0:F}",fila.PrecioVenta),String.Format("{0:F}", fila.CantidadProd * fila.PrecioVenta),fila.ProductoID.ToString(),"","R");
                }
                CalcularMonto();
            }
            gbEstado.Visible = true;           
            formDesSerie = new frmDesactivarSerie();
            formDesSerie.CargarSeriesDeComprobanteVenta(Convert.ToInt32(lblFacturaID.Text), "FACTURA");
        }
        public void CargarNroGuia(string NroGuiaRemision)
        {
            txtNroGuia.Text = NroGuiaRemision;
        }
        //--> EVENTOS <--//

        private void dgvDetalleFac_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == dgvDetalleFactura.Columns["DeleteProd"].Index)
            {
                if (MessageBox.Show("ESTA SEGURO DE ELIMINAR EL PRODUCTO", "ELIMINAR PRODUCTO", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    formDesSerie.EliminarSerieListaDesactivasDGVLISTASERIEDESACTIVAR(Convert.ToInt32(dgvDetalleFactura["CodigoProducto", e.RowIndex].Value));
                    if (Convert.ToString(dgvDetalleFactura["Identificador", e.RowIndex].Value) == "R")
                    {
                        dgvProductosEliminar.Rows.Add(dgvDetalleFactura["CodigoProducto", e.RowIndex].Value, lblFacturaID.Text);
                        formGuia.EliminarProductoLista(Convert.ToInt32(dgvDetalleFactura["CodigoProducto", e.RowIndex].Value));
                    }
                    dgvDetalleFactura.Rows.Remove(dgvDetalleFactura.Rows[e.RowIndex]);
                    MontoTotal = 0;
                    txtPago.Text = "";
                    txtVuelto.Text = "";
                    lblCodigoProducto.Text = "";
                    CalcularMonto();
                }
            }
        }
        private void btnNuevo_Click(object sender, EventArgs e)
        {
            try
            {
                LlenarComboCliente();
                txtFechaVence.Text = DateTime.Now.ToShortDateString().ToString();
                dtpFechaActual.Value = DateTime.Now;
                dtpFechaActual.Enabled = false;
                cmbTipoMoneda.SelectedIndex = 1;
                cmbFormaPago.SelectedIndex = 0;
                cmbRazonSocial.Text = "";
                txtRUCCLiente.Text = "";
                txtDirecCliente.Text = "";
                btnNuevo.Enabled = false;
                btnGuardar.Enabled = true;
                btnCancelar.Enabled = true;
                btnBuscar.Enabled = false;
                gbDatos.Enabled = true;
                lblReferencia.Text = "NUEVO";
                txtNroFactura.Select();
                formDesSerie = new frmDesactivarSerie();

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnNuevoCliente_Click(object sender, EventArgs e)
        {
            cmbRazonSocial.Text = "";
            txtRUCCLiente.Text = "";
            txtDirecCliente.Text = "";
            frmCliente formCliente = new frmCliente();
            formCliente.MdiParent = this.MdiParent;
            formCliente.Manipular = this;
            formCliente.NameFormulario = "frmCliente";
            formCliente.btnBuscar.Visible = false;
            formCliente.btnActualizar.Visible = false;
            formCliente.btnCancelar.Enabled = false;
            formCliente.Show();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                InhabilitarCampos();
                btnNuevo.Enabled = true;
                btnBuscar.Enabled = true;
                btnGuardar.Enabled = false;
                btnUpdateFact.Enabled = false;
                btnCancelar.Enabled = false;
                gbDatos.Enabled = false;                
                formGuia.Close();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void cmbTipoMoneda_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (cmbTipoMoneda.SelectedIndex == 0)
                {                    
                    if (dgvDetalleFactura.Rows.Count == 0)
                        txtTCambioComprob.Text = Convert.ToString(TasaCambio);
                    else
                    {
                        txtTCambioComprob.Text = Convert.ToString(TasaCambio);
                        CambiarMoneda("DOLARES");
                        CalcularMonto();
                    }
                }
                else if (cmbTipoMoneda.SelectedIndex == 1)
                {                    
                    if (dgvDetalleFactura.Rows.Count == 0)
                        txtTCambioComprob.Text = "SOLES";
                    else
                    {
                        txtTCambioComprob.Text = "SOLES";
                        CambiarMoneda("SOLES");
                        CalcularMonto();
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void frmFactura_Load(object sender, EventArgs e)
        {
            try
            {
                ObtenerTCambio();
                lblImpuesto.Text = Convert.ToString(IGV) + "%";
                cmbEstado.SelectedIndex = 0;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void cmbFormaPago_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (cmbFormaPago.SelectedIndex == 0)
                {
                    txtNroDias.Enabled = false;
                    txtNroDias.Text = "0";
                    txtPago.Select();
                    txtVuelto.Text = "0";
                    lblVueltoSaldo.Text = "Vuelto :";
                }
                else
                {
                    txtNroDias.Enabled = true;
                    txtNroDias.Select();
                    lblVueltoSaldo.Text = "Saldo :";
                    txtPago.Text = "0";
                    txtVuelto.Text = String.Format("{0:F}", MontoTotal);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }


        private void cmbRazonSocial_SelectionChangeCommitted(object sender, EventArgs e)
        {
            try
            {
                LlenarDatosCliente(Convert.ToString(cmbRazonSocial.SelectedValue));
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void cmbRazonSocial_KeyUp(object sender, KeyEventArgs e)
        {
            try
            {
                LlenarDatosCliente(Convert.ToString(cmbRazonSocial.SelectedValue));
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnBuscarProducto_Click(object sender, EventArgs e)
        {
            try
            {
                frmBuscarProducto formBusProd = new frmBuscarProducto();
                formBusProd.MdiParent = this.MdiParent;
                formBusProd.Manipular = this;
                formBusProd.NameFormulario = "frmFactura";
                formBusProd.Show();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void txtPago_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (txtTotal.Text != "0.0" && txtPago.Text != "" && cmbFormaPago.Text == "CONTADO")
                {
                    txtVuelto.Text = String.Format("{0:F}", Convert.ToDouble(txtPago.Text) - MontoTotal);
                }
                else if (txtTotal.Text != "0.0" && txtPago.Text != "" && cmbFormaPago.Text == "CREDITO")
                {
                    txtVuelto.Text = String.Format("{0:F}", MontoTotal - Convert.ToDouble(txtPago.Text));
                }
                else if (txtPago.Text == "" && cmbFormaPago.Text == "CREDITO")
                {
                    txtVuelto.Text = String.Format("{0:F}", MontoTotal);
                }
                else if (txtPago.Text == "" && cmbFormaPago.Text == "CONTADO")
                {
                    txtPago.Text = String.Format("{0:F}", MontoTotal);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }


        private void txtNroDias_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (txtNroDias.Text != "")
                {
                    Int32 nroDias = Convert.ToInt32(txtNroDias.Text);
                    txtFechaVence.Text = Convert.ToString(DateTime.Now.AddDays(nroDias).ToShortDateString());
                }
                else
                {
                    txtNroDias.Text = "0";
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                GuardarFactura();                
                MessageBox.Show("Factura Registrado Correctamente");
                gbDatos.Enabled = false;
                cbRegistrarGuia.Visible = true;
                formDesSerie.Close();
                btnNuevo.Enabled = true;
                btnBuscar.Enabled = true;
                btnGuardar.Enabled = false;
                btnUpdateFact.Enabled = false;
                btnCancelar.Enabled = false;
                gbDatos.Enabled = false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void dgvDetalleFactura_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.ColumnIndex != dgvDetalleFactura.Columns["DeleteProd"].Index)
                {
                    Int32 nroFila = Int32.Parse(e.RowIndex.ToString());
                    this.txtProducto.Text = Convert.ToString(dgvDetalleFactura["NameProduc", nroFila].Value);
                    this.txtStockActual.Text = Convert.ToString(dgvDetalleFactura["StockActual", nroFila].Value);
                    this.txtCantidad.Text = Convert.ToString(dgvDetalleFactura["CantidadProd", nroFila].Value);
                    this.txtPrecioVenta.Text = Convert.ToString(dgvDetalleFactura["PrecioUnitProd", nroFila].Value);
                    this.lblCodigoProducto.Text = Convert.ToString(dgvDetalleFactura["CodigoProducto", nroFila].Value);
                    this.lblNroFila.Text = Convert.ToString(nroFila);
                    dgvDetalleFactura.Enabled = false;
                    btnAgregarProducto.Visible = false;
                    btnActualizarProducto.Visible = true;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnCancelarUpdateProducto_Click(object sender, EventArgs e)
        {
            try
            {
                txtProducto.Text = "";
                txtStockActual.Text = "";
                txtCantidad.Text = "";
                txtPrecioVenta.Text = "";
                lblCodigoProducto.Text = "";
                lblNroFila.Text = "";
                cmbFormaPago.Select();
                dgvDetalleFactura.Enabled = true;
                btnAgregarProducto.Visible = true;
                btnActualizarProducto.Visible = false;
                btnBuscarProducto.Select();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnActualizarProducto_Click(object sender, EventArgs e)
        {
            try
            {
                formGuia.laGuiaForm = new frmGuiaRemision();
                if (VerificarListaProductoRepetido() == 0)
                {
                    Int32 nroFila = Convert.ToInt32(lblNroFila.Text);
                    Int32 Cantidad = Convert.ToInt32(txtCantidad.Text);
                    Double PrecioVentaUnit = Convert.ToDouble(txtPrecioVenta.Text);
                    Double MontoA = Convert.ToDouble(txtPrecioVenta.Text) * Cantidad;
                    if(formGuia.dgvDetalleGuia.Rows.Count==0)
                        formGuia.CargarDetalleGuia(txtNroGuia.Text);
                    formGuia.ActuliarzarProductoDetalleGuia(txtProducto.Text, Convert.ToInt32(txtCantidad.Text), Convert.ToString(dgvDetalleFactura["CodigoProducto", nroFila].Value));
                    dgvDetalleFactura["NameProduc", nroFila].Value = txtProducto.Text;                    
                    dgvDetalleFactura["CantidadProd", nroFila].Value = txtCantidad.Text;
                    dgvDetalleFactura["PrecioUnitProd", nroFila].Value = String.Format("{0:F}", PrecioVentaUnit);
                    dgvDetalleFactura["CodigoProducto", nroFila].Value = lblCodigoProducto.Text;
                    dgvDetalleFactura["Monto", nroFila].Value = String.Format("{0:F}", MontoA);
                    if (Convert.ToString(dgvDetalleFactura["Identificador", nroFila].Value) == "R")
                    {
                        dgvDetalleFactura["Identificador", nroFila].Value = "A";
                    }
                    else
                    {
                        dgvDetalleFactura["Identificador", nroFila].Value = "N";
                        dgvDetalleFactura["StockActual", nroFila].Value = txtStockActual.Text;
                    }                    
                    CalcularMonto();
                    ValidadCantidad(Convert.ToInt32(lblCodigoProducto.Text));
                    txtProducto.Text = "";
                    txtStockActual.Text = "";
                    txtCantidad.Text = "";
                    txtPrecioVenta.Text = "";
                    lblCodigoProducto.Text = "";
                    lblNroFila.Text = "";
                    cmbFormaPago.Select();
                    dgvDetalleFactura.Enabled = true;
                    btnAgregarProducto.Visible = true;
                    btnActualizarProducto.Visible = false;
                }
                else
                    MessageBox.Show("El Producto ya se encuentra en la lista ?");
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnAgregarProducto_Click(object sender, EventArgs e)
        {
            try
            {
                if (VerificarListaProductoRepetido() == 0)
                {
                    Int32 Cantidad = Convert.ToInt32(txtCantidad.Text);
                    Double Monto = Convert.ToDouble(txtPrecioVenta.Text) * Cantidad;
                    Double PrecioVentaUnit = Convert.ToDouble(txtPrecioVenta.Text);
                    dgvDetalleFactura.Rows.Add(Cantidad, txtProducto.Text, String.Format("{0:F}", PrecioVentaUnit), String.Format("{0:F}", Monto), lblCodigoProducto.Text, txtStockActual.Text,"N");
                    
                    if (lblReferencia.Text == "UPDATE") {
                        formGuia.dgvDetalleGuia.Rows.Add(txtProducto.Text,Cantidad,"UNIDAD","0",lblCodigoProducto.Text,"N");
                    }
                    
                    CalcularMonto();
                    formDesSerie.lblCantidad.Text = txtCantidad.Text;
                    formDesSerie.txtFiltrarSerie.ReadOnly = false;
                    formDesSerie.dgvListaSerieActivas.Enabled = true;
                    formDesSerie.CargarSeriePorProducto(Convert.ToInt32(lblCodigoProducto.Text));                    
                   
                    FormularioAbrirSerie();
                    txtProducto.Text = "";
                    txtStockActual.Text = "";
                    txtCantidad.Text = "";
                    txtPrecioVenta.Text = "";
                    lblCodigoProducto.Text = "";                    
                }
                else
                    MessageBox.Show("El Producto ya se encuentra en la lista ?");
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        private void txtTCambioComprob_KeyDown(object sender, KeyEventArgs e)
        {
            Double MontoT, PrecioUni;
            if (txtTCambioComprob.Text != "SOLES" && e.KeyCode == Keys.Enter)
            {
                for (int i = 0; i <= dgvDetalleFactura.Rows.Count - 1; i++)
                {
                    MontoT = Convert.ToDouble(dgvDetalleFactura["MontoReal", i].Value) * Convert.ToDouble(txtTCambioComprob.Text);
                    PrecioUni = MontoT / Convert.ToInt32(dgvDetalleFactura["CantidadProd", i].Value);
                    dgvDetalleFactura["PrecioUnitProd", i].Value = String.Format("{0:F}", PrecioUni);
                    dgvDetalleFactura["Monto", i].Value = String.Format("{0:F}", MontoT);
                }
                CalcularMonto();
            }
        }

        private void cbMostrarAllSeries_CheckedChanged(object sender, EventArgs e)
        {
            if (cbMostrarAllSeries.Checked == true)
            {
                if (dgvDetalleFactura.Rows.Count > 0)
                {
                        formDesSerie.MdiParent = this.MdiParent;
                        formDesSerie.Show();
                }
                else
                    MessageBox.Show("NO HAY SERIES A MOSTRAR");
                cbMostrarAllSeries.Checked = false;
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            frmBuscarFactura BusFac = new frmBuscarFactura();
            BusFac.btnRegresar.Visible = true;
            BusFac.btnCancelar.Visible = false;
            BusFac.MdiParent = this.MdiParent;
            BusFac.Show();
            this.Close();
        }

        private void btnUpdateFact_Click(object sender, EventArgs e)
        {
            try
            {
                ActualizarFactura();
                MessageBox.Show("FACTURA ACTUALIZADA CORRECTAMENTE");                
                formDesSerie.Close();
                btnNuevo.Enabled = true;
                btnBuscar.Enabled = true;
                btnGuardar.Enabled = false;
                btnUpdateFact.Enabled = false;
                btnCancelar.Enabled = false;
                gbDatos.Enabled = false;                
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void cbRegistrarGuia_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (cbRegistrarGuia.Checked == true)
                {
                    formGuia.MdiParent = this.MdiParent;
                    formGuia.Manipular = this;
                    formGuia.txtNroComprobantePago.Text = txtNroFactura.Text;
                    List<DataGridViewRow> lista = new List<DataGridViewRow>();
                    foreach (DataGridViewRow fila in dgvDetalleFactura.Rows)
                    {
                        formGuia.dgvDetalleGuia.Rows.Add(fila.Cells["NameProduc"].Value, fila.Cells["CantidadProd"].Value, "UNIDAD", "0", fila.Cells["CodigoProducto"].Value, "N");
                    }
                    formGuia.formDes = formDesSerie;
                    formGuia.LlenarComboCliente();
                    formGuia.cmbRazonSocial.SelectedValue = cmbRazonSocial.SelectedValue;
                    formGuia.LlenarDatosCliente(Convert.ToString(cmbRazonSocial.SelectedValue));
                    formGuia.llenarComboTransportista();
                    formGuia.cmbListaTransportista.Text = "";
                    formGuia.cmbEstado.SelectedIndex = 0;
                    formGuia.HabilitarGrupos();
                    formGuia.Show();
                    cbRegistrarGuia.Checked = false;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); cbRegistrarGuia.Checked = false; }
        }

        private void cbMostrarGuia_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (cbMostrarGuia.Checked == true)
                {
                    formGuia.MdiParent = this.MdiParent;
                    formGuia.Manipular = this;
                    formGuia.CargarDatosDeGuia(txtNroGuia.Text);                    
                    if(formGuia.dgvDetalleGuia.Rows.Count==0)
                        formGuia.CargarDetalleGuia(txtNroGuia.Text);
                    formGuia.btnGuardar.Enabled = false;
                    formGuia.btnActualizar.Enabled = true;
                    formGuia.btnCancelar.Enabled = true;
                    formGuia.HabilitarGrupos();
                    formGuia.Show();
                    cbMostrarGuia.Checked = false;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); cbMostrarGuia.Checked = false;}
        }        
    }
}